package com.dongpu.springboot.lombok.pojo;

import java.io.Serializable;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;

/**
 * @author biyuyang
 *
 * Lombok使用
 * 	一.引入依赖
 * 		<dependency>
 *       <groupId>org.projectlombok</groupId>
 *       <artifactId>lombok</artifactId>
 *       <optional>true</optional>
 *     </dependency>
 *  二.安装插件
 *  	Settings -> Plugins -> Lombok
 *  	注意:如果不安装插件,则会出现使用了Lombok注解的实体类对象setter和getter和构造方法报错
 *  	使用注解,简化java实体Bean的书写
 *  三.常用注解
 *		1.@Getter
 *			生成非静态,可变属性的getter方法
 *		2.@Setter
 *			生成非静态,可变属性的setter方法
 *		3.@AllArgsConstructor
 *			生成非静态,可变属性的满参构造函数(@AllArgsConstructor和手动生成满参构造函数二选一,否则编译报错)
 *		4.@NoArgsConstructor
 *			生成无参构造函数(@NoArgsConstructor和手动生成满参构造函数二选一,否则编译报错)
 *		5.@ToString
 *			生成非静态属性的toString()方法
 *		6.@EqualsAndHashCode
 *			重写equals和hashcode方法
 *		7.@Data
 *			相当于@ToString,@Setter,@Getter,@EqualsAndHashCode,@NoArgsConstructor
 *			注意:同时使用@Data和@AllargsConstructor后,默认的无参构造函数失效,要重新设置@NoArgsConstructor
 *		8.@Slf4j
 *			可以使用log对象进行日志输出(不建议使用@Log4j和@Log4j2,不好用)
 *			注意:只要引入了lombok依赖,并在类上添加了@Slf4j注解,都可以直接使用log日志对象
 *		9.NonNull
 *			在属性上面添加,转换后相当于添加了判断,如果为null,则抛出异常
 *			注意:经反编译后,可知,其是在setter方法和构造方法中添加了判断
 */
@Slf4j
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person implements Serializable {

	private static final long serialVersionUID = 7223652561560057046L;
	@NonNull
	private Integer id;
	@NonNull
	private String userName;
	private int sex;
	private Date createTime;

	private static final String COMPANY_MYSELF = "dongpu";
	private final String COMPANY_MYSELF1 = "dongpu";

	public static void main(String[] args) {
		//注意:无参构造不会报错的
		Person person = new Person(null,null,1,new Date());
		System.out.println(person);
	}

}
